"""
增强某个函数的功能，又不希望修改这个函数原本的定义，
这种在代码运行期间动态增加功能的方式，称之为“装饰器”（Decorator）。
本质上，decorator就是一个返回函数的高阶函数。
"""

import functools


def log(text):
    def decorator(func):
        def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator


@log('当前执行:')
def now():
    print('2018-12-18')


now()
f = now
print(f.__name__)
print(now.__name__)
f()  # 调用函数


def log2(text):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator


@log2('执行ing：')
def now2():
    print('2018-12-19')


f = now2
print(f.__name__)
now2()

